<?php

ini_set('display_errors', 'Off');
ini_set('log_errors', 'Off');

session_start();

//Librairie de fonctions
require (__DIR__ . '/vendor/autoload.php');
require_once("lib/libconfig.inc.php");
require_once("lib/libsession.inc.php");
require_once("lib/libfonctions.inc.php");
require_once("lib/libmysql.inc.php");
require_once("lib/libencode.inc.php");
require_once("lib/libforms.inc.php");
require_once("lib/libcourriel.inc.php");
require_once("lib/libliberations.inc.php");
require_once("lib/lib2fa.inc.php");

//Encodage des caractères
header('Content-Type: text/html; charset=$ENCODAGE');

unset($msg);
$msg = "vide";

if (isset($_POST['bouton'])) {

    $msg = "vide2";

    //filtrer_valeur_saisie();
    // Retrait de la fonction import_request_variable.
    // Remplacer par une extraction manuelle de toutes les valeurs requises.
    // Simon G. 2013-10-12
    // import_request_variables("P", "r");

    if (is_array($_POST) && count($_POST) > 0) {
        foreach ($_POST as $clef => $valeur) {
            unset($nom_var);
            $nom_var = "r" . $clef;
            $$nom_var = $_POST[$clef];
        }
    }

    $rbouton = antiInjection($rbouton);
    unset($operation);
    $opereussie = true;
    switch ($rbouton) {
        case "verification":
            if ($rltypeopr != "" && $rldatecreation != "" && $rlreference != "") {
                // Validation du type d'opération
                $rltypeopr2 = antiInjection($rltypeopr);
                if ($rltypeopr2 != "1" && $rltypeopr2 != "2") {
                    $opereussie = false;
                    $msg = "Le type d'op&eacute; n'a pas &eacute;t&eacute; choisit.";
                    break;
                }

                // Validation de la date de cr�ation
                $rldatecreation = antiInjection($rldatecreation);
                if (strtotime($rldatecreation) == false) {
                    $opereussie = false;
                    $msg = "Le format de date de création est invalide.";
                    break;
                }

                //La référence est le numéro de l'employé dans la bd
                $rlreference = antiInjection($rlreference);
                unset($sqlparam, $result);
                $sqlparam["table"][] = "employes";
                $sqlparam["champs"][] = "CONCAT(nomfamille,\", \",prenom) as nomemploye";
                $sqlparam["where"][] = sprintf("refemploye = %d", $rlreference);
                $result = executerRequeteSql($sqlparam);

                if (isset($result) && is_array($result) && count($result) > 0) {
                    //Ajout de l'entête de la libération
                    $nomemploye = $result[0]["nomemploye"];

                    $datetemp = $rdatelib;
                    $lieutemp = $rlieu;
                    $detailtemp = $rldetail;
                    unset($rdatelib);
                    unset($rlieu);
                    unset($rldetail);

                    //Calcul du nombre de ligne à insérer
                    if (strpos($datetemp, "**") !== false) {
                        $rdatelib = explode("**", $datetemp);
                    } else {
                        $rdatelib[0] = $datetemp;
                    }

                    if (strpos($rlcomm, "**") !== false) {
                        $rcommentaire = explode("**", $rlcomm);
                    } else {
                        $rcommentaire[0] = $rlcomm;
                    }

                    if (strpos($lieutemp, "**") !== false) {
                        $rlieu = explode("**", $lieutemp);
                    } else {
                        $rlieu[0] = $lieutemp;
                    }

                    if (strpos($rlassume, "**") !== false) {
                        $rlassumerpar = explode("**", $rlassume);
                    } else {
                        $rlassumerpar[0] = $rlassume;
                    }

                    if (strpos($rlart, "**") !== false) {
                        $rlarticle = explode("**", $rlart);
                    } else {
                        $rlarticle[0] = $rlart;
                    }

                    if (strpos($rldur, "**") !== false) {
                        $rlduree = explode("**", $rldur);
                    } else {
                        $rlduree[0] = $rldur;
                    }

                    if (strpos($detailtemp, "**") !== false) {
                        $rldetail = explode("**", $detailtemp);
                    } else {
                        $rldetail[0] = $detailtemp;
                    }

                    $nombreligne = sizeof($rdatelib);

                    //Vérification du détail de la libération de chaque ligne
                    for ($x = 0; $x < $nombreligne; $x++) {

                        // Validation sur la date
                        $rdatelib2 = antiInjection($rdatelib[$x]);
                        if (strtotime($rdatelib2) == false) {
                            $opereussie = false;
                            $msg = "Le format de la date de libération «$rdatelib2» est invalide.";
                            break;
                        }

                        // Validation sur l'article
                        $rlarticle2 = antiInjection($rlarticle[$x]);
                        unset($sqlparam, $result1);
                        $sqlparam["table"][] = "articles";
                        $sqlparam["champs"][] = "refarticle";
                        $sqlparam["champs"][] = "noarticle";
                        $sqlparam["where"][] = sprintf("refarticle='%s'", $rlarticle2);
                        $result1 = executerRequeteSql($sqlparam);

                        if (isset($result1) && is_array($result1) && sizeof($result1) > 0) {
                            $refarticle = $result1[0]["noarticle"];
                        } else {
                            $opereussie = false;
                            $msg = "Le numéro d'article «$rlarticle2» est inconnu.";
                            break;
                        }

                        //Validation sur le commentaire
                        $rcommentaire2 = antiInjection($rcommentaire[$x]);
                        if (empty($rcommentaire2)) {
                            $opereussie = false;
                            $msg = "Le commentaire est vide";
                            break;
                        }

                        // Validation sur la durée
                        $rlduree2 = antiInjection($rlduree[$x]);
                        unset($sqlparam, $result1);
                        $sqlparam["table"][] = "duree";
                        $sqlparam["champs"][] = "refduree";
                        $sqlparam["where"][] = sprintf("refduree='%s'", $rlduree2);
                        $result1 = executerRequeteSql($sqlparam);
                        if (isset($result1) && is_array($result1) && sizeof($result1) > 0) {
                            $refduree = $result1[0]["refduree"];
                        } else {
                            $opereussie = false;
                            $msg = "La durée «$rlduree2» est inconnue.";
                            break;
                        }

                        // Validation sur le lieu
                        $rlieu2 = antiInjection($rlieu[$x]);
                        if (empty($rlieu2)) {
                            $opereussie = false;
                            $msg = "Le lieu est vide";
                            break;
                        }

                        if (empty($rcommentaire2)) {
                            $opereussie = false;
                            $msg = "Le commentaire est vide";
                            break;
                        }

                        // Validation sur le payeur
                        $rlassumerpar2 = antiInjection($rlassumerpar[$x]);
                        if ($rlassumerpar2 != "Syndicat" && $rlassumerpar2 != "Employeur") {
                            $opereussie = false;
                            $msg = "L'organisme payeur n'a pas été choisit.";
                            break;
                        }

                        // Validation pour vérifier s'il existe un autre document
                        // créé avec la même date de libération, le même employé et le même article
                        unset($sqlparam, $result1);
                        $sqlparam["table"][] = "liberations";
                        $sqlparam["table"][] = "ligneliberations";
                        $sqlparam["champs"][] = "liberations.refliberation";
                        $sqlparam["join"][] = "ligneliberations.refliberation=liberations.refliberation";
                        $sqlparam["where"][] = "DATE_FORMAT(ligneliberations.dateliberation,'%Y-%m-%d')='" .
                                sprintf("%s'", $rdatelib2);
                        $sqlparam["where"][] = sprintf("liberations.refemploye=%d", $rlreference);
                        $sqlparam["where"][] = sprintf("liberations.typeoperation=%d", $rltypeopr2);
                        //$sqlparam["where"][] = sprintf("ligneliberations.refarticle=%d", $rlarticle2);

                        // Clef existe si le mode est modification.
                        if (array_key_exists($x, $rldetail) && $rldetail[$x] > 0) {
                            //$sqlparam["where"][] = sprintf("ligneliberations.refligneliberation<>%d", $rldetail[$x]);
                        }
                        $sqlparam["where"][] = "liberations.refliberation>0";
                        $result1 = executerRequeteSql($sqlparam);

                        if (isset($result1) && is_array($result1) && sizeof($result1) > 0) {
                            $opereussie = false;
                            $msg = sprintf("La date de libération «%s» avec l'article «%s» pour l'employé «%s» a "
                                    . "déjà été demandé auparavant.",
                                    $rdatelib2, $refarticle, $nomemploye);
                            $x = $nombreligne + 1;
                            break;
                        }
                    }
                    // Tout est ok! Libération valide
                    if ($opereussie) {
                        $msg = "ok";
                    }
                } else {
                    $opereussie = false;
                    $msg = sprintf("L'employé «%s» n'est pas un membre connu.", $nomemploye);
                }
            } else {
                if ($rltypeopr == "") {
                    $msg = "Le type d'opération n'a pas été sélectionné.";
                } elseif ($rldatecreation == "") {
                    $msg = "La date de création n'a pas été inscrite ou est invalide.";
                } elseif ($rlreference == "") {
                    $msg = "L'employé n'a pas été sélectionné.";
                }
            }
            break;
        default:
            $msg = "Erreur interne de la fonction.";
            break;
    }
}
//var_dump($msg);
print "$msg";
?>